'use strict';	//严格模式
// 学生管理的控制器文件：增删改查 等操作

const xtpl = require('xtpl');	// 模板引擎
const path = require('path');
const fs = require('fs');
const moment = require('moment');	// 转换时间格式的模块

const db = require('../configs/database.js');

// 加载基础控制器
const baseCtr = require('./baseController.js');

// 学生添加页面
module.exports.studentAdd = function(req,res){
	// xtpl.renderFile('',{},function(){})
	// 先查询班级列表
	db.table('class').select().then(function(data){
		// console.log(data);
		db.table('subject').select().then(function(subData){
			// 显示视图
			xtpl.renderFile(
				path.join(__dirname,'../views/admin/student_add.html'),	// 加载视图文件
				{
					page:'stuAdd',	// 页面名称
					clsList:data,
					subList:subData
				},  // 第2个参数（主要是用于传给视图的）
				function(err,content){
					// 设置输出的内容类型 html
					res.setHeader('Content-Type','text/html;charset=utf-8');
					res.send(content);
				}
			)
		})
	}).catch(function(err){
		//err为具体的错误信息
		console.log(err)	// 命令行显示(方便调试)
	})
}

// 学生添加操作
module.exports.studentAddData = function(req,res){
	// 测试
	// console.log(req.body.stu_name)
	// 添加学生的逻辑：要先检查是否已录入，没有才可以添加
	var where = `stu_name='${req.body.stu_name}' or stu_phone='${req.body.stu_phone}'`;
	db.table('student').field('stu_id').where(where).find().then(function(result){
		// console.log(JSON.stringify(result))  // {} 字符串的
		// console.log(JSON.stringify(result)=='{}')
		if(JSON.stringify(result)=='{}'){
			// console.log(req.body.stu_name)
			// console.log(req.body.sub) ['1','2']
			// 接下来这里做添加
			// console.log(req.files.stu_img);
			var data = {
				stu_name:req.body.stu_name,
				stu_age:req.body.stu_age,
				stu_sex:req.body.stu_sex,
				stu_phone:req.body.stu_phone,
				stu_time:Date.parse(req.body.stu_time)/1000,
				class_id:req.body.class_id,
				stu_img:path.basename(req.files.stu_img.path)	// 只获取名称，不包括路径
			}

			// console.log(data)
			db.table('student').add(data).then(function(){
				//na stuid
				db.table('student').where('stu_name='+req.body.stu_name).select().then(function(data){
					// console.log(data[0].stu_id)
					var data2=[]
					if(req.body.sub!=undefined){
						req.body.sub.forEach(function(item,i){
							var obj={
								stu_id:data[0].stu_id,
								sub_id:req.body.sub[i]
							}
							data2.push(obj)
						})
						// var obj1={
						// 	stu_id:data[0].stu_id,
						// 	sub_id:req.body.sub[0]
						// }
						// var obj2={
						// 	stu_id:data[0].stu_id,
						// 	sub_id:req.body.sub[1]
						// }
						// data2.push(obj1)
						// data2.push(obj2)
						db.table('student_subject_data').addAll(data2).then(function(){
							
						})
					}
					console.log('添加成功')
					// 跳转到列表页
					res.redirect('/admin/student/student_list');  // redirect 重定向，跳转
				})
			}).catch(function(err){
				//err为具体的错误信息
				console.log(err)	// 命令行显示(方便调试)
			})
		}else{
			// 提示有记录，不能添加
			// res.send('<script>alert("记录已存在");history.go(-1)</script>');
			// 这种页面提示比较常见
			baseCtr.sendMsg('该学生已存在',res);
		}

		// res.end();	// 结束程序，跳转不能加这个
	}).catch(function(err){
		//err为具体的错误信息
		console.log(err)	// 命令行显示(方便调试)
	})
}

// 学生列表
module.exports.studentList = function(req,res){

	// var search=''
	// var where=''
	// if(req.query.search!=undefined){
	// 	search=req.query.search
	// 	where='stu_name='+search+' or '+'stu_phone='+search
	// }else{
	// 	where='stu_id > 0'
	// }
	// console.log(where)
	var pn = req.query.pn!=undefined?req.query.pn:1;	// 这句可以接收网址 ...admin/student/student_list?pn=2，上面的参数pn的值
	// console.log(pn);	// 得到 2
	var limit = 2;	// 每页显示2条记录
	var start = (pn-1)*limit;

	// 关键字搜索
	var where = '';
	var s = req.query.s!=undefined && req.query.s!=''?req.query.s:'';	// 搜索的关键字
	if(s!=''){
		where = `stu_name like '%${s}%' or stu_phone like '%${s}%'`;
	}

	// select * from student left join class on student.class_id=class.class_id
	db.table('student').join(
	// {	
	// 	table: 'class',
	// 	join: 'left',
	// 	on: ['class_id','class_id']
	// }
	'pre_class on pre_student.class_id = pre_class.class_id' 
	).where(where).limit(start,limit).order('stu_id DESC').select().then(function(data){
		// console.log(data)
		data.forEach(function(item,i){
			if(data[i].stu_status=='0'){
				data[i].stu_statusZ='无'
			}
			else if(data[i].stu_status=='1'){
				data[i].stu_statusZ='在读'
			}
			else if(data[i].stu_status=='2'){
				data[i].stu_statusZ='休学'
			}
			else if(data[i].stu_status=='3'){
				data[i].stu_statusZ='开除'
			}
			else if(data[i].stu_status=='4'){
				data[i].stu_statusZ='已毕业'
			}
		})

		// 总记录的查询
		db.table('student').where(where).count('stu_id').then(function(total){	// total 总计
			
			var endPn = Math.ceil(total/limit);
			// 用数组存储页码  [1,2,3]
			var pageArr = [];
			for(var i=1; i<=endPn; i++){
				pageArr.push(i);
			}

			// 分页：（1）页码 （2）总记录数 （3）每页显示多少条记录（4）关联查询要加limit
			xtpl.renderFile(
				path.join(__dirname,'../views/admin/student_list.html'),
				{
					page:'stuList',	// 页面名称
					stuList:data,
					pageArr:pageArr,
					pn:parseInt(pn),	// 是url的参数值，是字符串，要转成整型
					endPn: endPn,
					search:s
				},
				function(err,content){
					// 设置输出的内容类型 html
					res.setHeader('Content-Type','text/html;charset=utf-8');
					res.send(content);
				}
			)
		})
		
	}).catch(function(err){
		//err为具体的错误信息
		console.log(err)	// 命令行显示(方便调试)
	})
	
}

// 学生删除
module.exports.studentDelete = function(req,res){
	// var id = req.params.id;  // 这句可以接收网址 ...admin/student/student_delete/4
	// // 接下来就是删除操作
	// db.table('student_subject_data').where({stu_id:id}).delete().then(function(affectRows){
	// 	// 删除成功，再删除学生表
	// 	db.table('student').where({stu_id:id}).delete().then(function(affectRows){
	// 		// 删除成功
	// 		res.redirect('/admin/student/student_list');
	// 	});
	// });

	var id = req.params.id; 
	var arr=id.split(',')
	var str0=' or stu_id='
	var str='stu_id=0'
	for(var i=0;i<arr.length;i++){
		str+=str0+arr[i]
	} 
	db.table('student_subject_data').where(str).delete().then(function(affectRows){
		
		db.table('student').where(str).delete().then(function(affectRows){
		
			res.redirect('/admin/student/student_list');
		});
	});
}

// 学生修改页面
module.exports.studentEdit = function(req,res){
	// xtpl.renderFile('',{},function(){})
	// 先查询班级列表
	db.table('class').select().then(function(clsData){
		
		db.table('student').where({stu_id:req.params.id}).find().then(function(stuData){

			db.table('subject').select().then(function(subData){

				db.table('student_subject_data').where({stu_id:req.params.id}).select().then(function(stuSubData){
					// console.log(subData)
					// console.log(stuSubData)
					var arr=[]
					for(var i=0;i<subData.length;i++){
						for(var j=0;j<stuSubData.length;j++){
							// subData[i].flag=0
							if(subData[i].sub_id==stuSubData[j].sub_id){
								// arr.push(subData[i].sub_id)
								arr.push(i)
								// subData[i].flag=1
							}
						}
					}
					// console.log(arr) //[1,2,3]
					arr.forEach(function(item,i){
						subData[item].flag=1
					})
					// console.log(subData) 
	
					// 转换时间（记得时间戳是：毫秒）
					stuData.stu_time = moment(stuData.stu_time*1000).format('YYYY-MM-DD');
					// 显示视图
					xtpl.renderFile(
						path.join(__dirname,'../views/admin/student_edit.html'),	// 加载视图文件
						{
							page:'stuAdd',	// 页面名称
							clsList:clsData,
							stuData:stuData,
							subList:subData,
							stuSubList:stuSubData,
							arr:arr
						},  // 第2个参数（主要是用于传给视图的）
						function(err,content){
							// 设置输出的内容类型 html
							res.setHeader('Content-Type','text/html;charset=utf-8');
							res.send(content);
						}
					)
				})

			})

		})

	}).catch(function(err){
		//err为具体的错误信息
		console.log(err)	// 命令行显示(方便调试)
	})
}

// 学生修改操作
module.exports.studentEditData = function(req,res){
	// 测试
	// console.log(req.body.stu_name)
	// 修改学生的逻辑：要先检查是否已录入，没有才可以修改
	var where = `stu_id!='${req.params.id}' and (stu_name='${req.body.stu_name}' or stu_phone='${req.body.stu_phone}')`;
	db.table('student').field('stu_id').where(where).find().then(function(result){
		// console.log(JSON.stringify(result))  // {} 字符串的
		// console.log(JSON.stringify(result)=='{}')
		if(JSON.stringify(result)=='{}'){
			// 接下来这里做修改
			// console.log(req.files.stu_img);
			var data = {
				stu_name:req.body.stu_name,
				stu_age:req.body.stu_age,
				stu_sex:req.body.stu_sex,
				stu_phone:req.body.stu_phone,
				stu_time:Date.parse(req.body.stu_time)/1000,
				class_id:req.body.class_id,
				// stu_img:path.basename(req.files.stu_img.path)	// 只获取名称，不包括路径
			}

			if(req.files.stu_img.size==0){
				fs.unlink(req.files.stu_img.path, function() {});
			}else{
				data.stu_img=path.basename(req.files.stu_img.path)	// 只获取名称，不包括路径
			}




			// console.log(data)
			db.table('student').where({stu_id:req.params.id}).update(data).then(function(){


					db.table('student_subject_data').where({stu_id:req.params.id}).delete().then(function(affectRows){

					
						// console.log(data[0].stu_id)
						var data2=[]
						console.log('1')
						console.log(req.body.sub)
						console.log('2')
						if(req.body.sub!=undefined){
							req.body.sub.forEach(function(item,i){
								var obj={
									stu_id:req.params.id,
									sub_id:req.body.sub[i]
								}
								data2.push(obj)
							})
						
							db.table('student_subject_data').addAll(data2).then(function(){
								
								
							})
						}
						console.log('修改成功')
						// 跳转到列表页
						res.redirect('/admin/student/student_list');  // redirect 重定向，跳转

					})



				


				// console.log('修改成功')
				// // 跳转到列表页
				// res.redirect('/admin/student/student_list');  // redirect 重定向，跳转
			}).catch(function(err){
				//err为具体的错误信息
				console.log(err)	// 命令行显示(方便调试)
			})
		}else{
			// 提示有记录，不能添加
			// res.send('<script>alert("记录已存在");history.go(-1)</script>');
			// 这种页面提示比较常见
			baseCtr.sendMsg('该学生已存在',res);
		}

		// res.end();	// 结束程序，跳转不能加这个
	}).catch(function(err){
		//err为具体的错误信息
		console.log(err)	// 命令行显示(方便调试)
	})
}

module.exports.studentStatus = function(req,res){
	var data = {
				stu_status:req.body.stu_status
			}
			console.log(data)
	db.table('student').where({stu_id:req.body.stu_id}).update(data).then(function(result){
		res.send( JSON.stringify({error:0,msg:'修改成功'}) ) 
	})
}